package twitter.streaming; import backtype.storm.Config; import backtype.storm.LocalCluster; import backtype.storm.StormSubmitter; import backtype.storm.generated.AlreadyAliveException; import backtype.storm.generated.InvalidTopologyException; import backtype.storm.topology.TopologyBuilder; /** * To run this topology you should execute this main as: * java -cp theGeneratedJar.jar twitter.streaming.Topology <track> <twitterUser> <twitterPassword> * * @author StormBook * */ public class Topology { public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException { TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("tweets-collector", new ApiStreamingSpout(),1); builder.setBolt("data-extractor", new TwitterDataExtractor()). shuffleGrouping("tweets-collector"); builder.setBolt("tweets-saver", new TwitterHashtagsSaver()). shuffleGrouping("data-extractor"); Config conf = new Config(); int i = 0; conf.put("redisHost",args[i++]); conf.put("redisPort", new Integer(args[i++])); conf.put("track", args[i++]); conf.put("user", args[i++]); conf.put("password", args[i++]); i++; if(args.length <= i || args[i].equals("local")){ LocalCluster cluster = new LocalCluster(); cluster.submitTopology("twitter-hashtag-summarizer", conf, builder.createTopology()); }else{ StormSubmitter.submitTopology("twitter-hashtag-summarizer", conf, builder.createTopology()); } } }